Passed
Pull Request — main (#90)
by
unknown
08:09 queued 05:39
created

prettify.js ➔ Q   F

Complexity

Conditions 26

Size

Total Lines 1
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 1
rs 0
c 0
b 0
f 0
cc 26

How to fix   Complexity   

Complexity

Complex classes like prettify.js ➔ Q often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
/* eslint-disable */
2
window.PR_SHOULD_USE_CONTINUATION = true;
3
(function () {
4
  var h = ["break,continue,do,else,for,if,return,while"];
5
  var u = [
6
    h,
7
    "auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile",
8
  ];
9
  var p = [
10
    u,
11
    "catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof",
12
  ];
13
  var l = [
14
    p,
15
    "alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where",
16
  ];
17
  var x = [
18
    p,
19
    "abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient",
20
  ];
21
  var R = [
22
    x,
23
    "as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var",
24
  ];
25
  var r =
26
    "all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";
27
  var w = [
28
    p,
29
    "debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN",
30
  ];
31
  var s =
32
    "caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";
33
  var I = [
34
    h,
35
    "and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None",
36
  ];
37
  var f = [
38
    h,
39
    "alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END",
40
  ];
41
  var H = [h, "case,done,elif,esac,eval,fi,function,in,local,set,then,until"];
42
  var A = [l, R, w, s + I, f, H];
43
  var e =
44
    /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
45
  var C = "str";
46
  var z = "kwd";
47
  var j = "com";
48
  var O = "typ";
49
  var G = "lit";
50
  var L = "pun";
51
  var F = "pln";
52
  var m = "tag";
53
  var E = "dec";
54
  var J = "src";
55
  var P = "atn";
56
  var n = "atv";
57
  var N = "nocode";
58
  var M =
59
    "(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";
60
  function k(Z) {
61
    var ad = 0;
62
    var S = false;
63
    var ac = false;
64
    for (var V = 0, U = Z.length; V < U; ++V) {
65
      var ae = Z[V];
66
      if (ae.ignoreCase) {
67
        ac = true;
68
      } else {
69
        if (
70
          /[a-z]/i.test(
71
            ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ""),
72
          )
73
        ) {
74
          S = true;
75
          ac = false;
76
          break;
77
        }
78
      }
79
    }
80
    var Y = { b: 8, t: 9, n: 10, v: 11, f: 12, r: 13 };
81
    function ab(ah) {
82
      var ag = ah.charCodeAt(0);
83
      if (ag !== 92) {
84
        return ag;
85
      }
86
      var af = ah.charAt(1);
87
      ag = Y[af];
88
      if (ag) {
89
        return ag;
90
      } else {
91
        if ("0" <= af && af <= "7") {
92
          return parseInt(ah.substring(1), 8);
93
        } else {
94
          if (af === "u" || af === "x") {
95
            return parseInt(ah.substring(2), 16);
96
          } else {
97
            return ah.charCodeAt(1);
98
          }
99
        }
100
      }
101
    }
102
    function T(af) {
103
      if (af < 32) {
104
        return (af < 16 ? "\\x0" : "\\x") + af.toString(16);
105
      }
106
      var ag = String.fromCharCode(af);
107
      if (ag === "\\" || ag === "-" || ag === "[" || ag === "]") {
108
        ag = "\\" + ag;
109
      }
110
      return ag;
111
    }
112
    function X(am) {
113
      var aq = am
114
        .substring(1, am.length - 1)
115
        .match(
116
          new RegExp(
117
            "\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]",
118
            "g",
119
          ),
120
        );
121
      var ak = [];
122
      var af = [];
123
      var ao = aq[0] === "^";
124
      for (var ar = ao ? 1 : 0, aj = aq.length; ar < aj; ++ar) {
125
        var ah = aq[ar];
126
        if (/\\[bdsw]/i.test(ah)) {
127
          ak.push(ah);
128
        } else {
129
          var ag = ab(ah);
130
          var al;
131
          if (ar + 2 < aj && "-" === aq[ar + 1]) {
132
            al = ab(aq[ar + 2]);
133
            ar += 2;
134
          } else {
135
            al = ag;
136
          }
137
          af.push([ag, al]);
138
          if (!(al < 65 || ag > 122)) {
139
            if (!(al < 65 || ag > 90)) {
140
              af.push([Math.max(65, ag) | 32, Math.min(al, 90) | 32]);
141
            }
142
            if (!(al < 97 || ag > 122)) {
143
              af.push([Math.max(97, ag) & ~32, Math.min(al, 122) & ~32]);
144
            }
145
          }
146
        }
147
      }
148
      af.sort(function (av, au) {
149
        return av[0] - au[0] || au[1] - av[1];
150
      });
151
      var ai = [];
152
      var ap = [NaN, NaN];
153
      for (var ar = 0; ar < af.length; ++ar) {
154
        var at = af[ar];
155
        if (at[0] <= ap[1] + 1) {
156
          ap[1] = Math.max(ap[1], at[1]);
157
        } else {
158
          ai.push((ap = at));
159
        }
160
      }
161
      var an = ["["];
162
      if (ao) {
163
        an.push("^");
164
      }
165
      an.push.apply(an, ak);
166
      for (var ar = 0; ar < ai.length; ++ar) {
167
        var at = ai[ar];
168
        an.push(T(at[0]));
169
        if (at[1] > at[0]) {
170
          if (at[1] + 1 > at[0]) {
171
            an.push("-");
172
          }
173
          an.push(T(at[1]));
174
        }
175
      }
176
      an.push("]");
177
      return an.join("");
178
    }
179
    function W(al) {
180
      var aj = al.source.match(
181
        new RegExp(
182
          "(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)",
183
          "g",
184
        ),
185
      );
186
      var ah = aj.length;
187
      var an = [];
188
      for (var ak = 0, am = 0; ak < ah; ++ak) {
189
        var ag = aj[ak];
190
        if (ag === "(") {
191
          ++am;
192
        } else {
193
          if ("\\" === ag.charAt(0)) {
194
            var af = +ag.substring(1);
195
            if (af && af <= am) {
196
              an[af] = -1;
197
            }
198
          }
199
        }
200
      }
201
      for (var ak = 1; ak < an.length; ++ak) {
202
        if (-1 === an[ak]) {
203
          an[ak] = ++ad;
204
        }
205
      }
206
      for (var ak = 0, am = 0; ak < ah; ++ak) {
207
        var ag = aj[ak];
208
        if (ag === "(") {
209
          ++am;
210
          if (an[am] === undefined) {
211
            aj[ak] = "(?:";
212
          }
213
        } else {
214
          if ("\\" === ag.charAt(0)) {
215
            var af = +ag.substring(1);
216
            if (af && af <= am) {
217
              aj[ak] = "\\" + an[am];
218
            }
219
          }
220
        }
221
      }
222
      for (var ak = 0, am = 0; ak < ah; ++ak) {
223
        if ("^" === aj[ak] && "^" !== aj[ak + 1]) {
224
          aj[ak] = "";
225
        }
226
      }
227
      if (al.ignoreCase && S) {
228
        for (var ak = 0; ak < ah; ++ak) {
229
          var ag = aj[ak];
230
          var ai = ag.charAt(0);
231
          if (ag.length >= 2 && ai === "[") {
232
            aj[ak] = X(ag);
233
          } else {
234
            if (ai !== "\\") {
235
              aj[ak] = ag.replace(/[a-zA-Z]/g, function (ao) {
236
                var ap = ao.charCodeAt(0);
237
                return "[" + String.fromCharCode(ap & ~32, ap | 32) + "]";
238
              });
239
            }
240
          }
241
        }
242
      }
243
      return aj.join("");
244
    }
245
    var aa = [];
246
    for (var V = 0, U = Z.length; V < U; ++V) {
247
      var ae = Z[V];
248
      if (ae.global || ae.multiline) {
249
        throw new Error("" + ae);
250
      }
251
      aa.push("(?:" + W(ae) + ")");
252
    }
253
    return new RegExp(aa.join("|"), ac ? "gi" : "g");
254
  }
255
  function a(V) {
256
    var U = /(?:^|\s)nocode(?:\s|$)/;
257
    var X = [];
258
    var T = 0;
259
    var Z = [];
260
    var W = 0;
261
    var S;
262
    if (V.currentStyle) {
263
      S = V.currentStyle.whiteSpace;
264
    } else {
265
      if (window.getComputedStyle) {
266
        S = document.defaultView
267
          .getComputedStyle(V, null)
268
          .getPropertyValue("white-space");
269
      }
270
    }
271
    var Y = S && "pre" === S.substring(0, 3);
272
    function aa(ab) {
273
      switch (ab.nodeType) {
274
        case 1:
275
          if (U.test(ab.className)) {
276
            return;
277
          }
278
          for (var ae = ab.firstChild; ae; ae = ae.nextSibling) {
279
            aa(ae);
280
          }
281
          var ad = ab.nodeName;
282
          if ("BR" === ad || "LI" === ad) {
283
            X[W] = "\n";
284
            Z[W << 1] = T++;
285
            Z[(W++ << 1) | 1] = ab;
286
          }
287
          break;
288
        case 3:
289
        case 4:
290
          var ac = ab.nodeValue;
291
          if (ac.length) {
292
            if (!Y) {
293
              ac = ac.replace(/[ \t\r\n]+/g, " ");
294
            } else {
295
              ac = ac.replace(/\r\n?/g, "\n");
296
            }
297
            X[W] = ac;
298
            Z[W << 1] = T;
299
            T += ac.length;
300
            Z[(W++ << 1) | 1] = ab;
301
          }
302
          break;
303
      }
304
    }
305
    aa(V);
306
    return { sourceCode: X.join("").replace(/\n$/, ""), spans: Z };
307
  }
308
  function B(S, U, W, T) {
309
    if (!U) {
310
      return;
311
    }
312
    var V = { sourceCode: U, basePos: S };
313
    W(V);
314
    T.push.apply(T, V.decorations);
315
  }
316
  var v = /\S/;
317
  function o(S) {
318
    var V = undefined;
319
    for (var U = S.firstChild; U; U = U.nextSibling) {
320
      var T = U.nodeType;
321
      V = T === 1 ? (V ? S : U) : T === 3 ? (v.test(U.nodeValue) ? S : V) : V;
322
    }
323
    return V === S ? undefined : V;
324
  }
325
  function g(U, T) {
326
    var S = {};
327
    var V;
328
    (function () {
329
      var ad = U.concat(T);
330
      var ah = [];
331
      var ag = {};
332
      for (var ab = 0, Z = ad.length; ab < Z; ++ab) {
333
        var Y = ad[ab];
334
        var ac = Y[3];
335
        if (ac) {
336
          for (var ae = ac.length; --ae >= 0; ) {
337
            S[ac.charAt(ae)] = Y;
338
          }
339
        }
340
        var af = Y[1];
341
        var aa = "" + af;
342
        if (!ag.hasOwnProperty(aa)) {
343
          ah.push(af);
344
          ag[aa] = null;
345
        }
346
      }
347
      ah.push(/[\0-\uffff]/);
348
      V = k(ah);
349
    })();
350
    var X = T.length;
351
    var W = function (ah) {
352
      var Z = ah.sourceCode,
353
        Y = ah.basePos;
354
      var ad = [Y, F];
355
      var af = 0;
356
      var an = Z.match(V) || [];
357
      var aj = {};
358
      for (var ae = 0, aq = an.length; ae < aq; ++ae) {
359
        var ag = an[ae];
360
        var ap = aj[ag];
361
        var ai = void 0;
362
        var am;
363
        if (typeof ap === "string") {
364
          am = false;
365
        } else {
366
          var aa = S[ag.charAt(0)];
367
          if (aa) {
368
            ai = ag.match(aa[1]);
369
            ap = aa[0];
370
          } else {
371
            for (var ao = 0; ao < X; ++ao) {
372
              aa = T[ao];
373
              ai = ag.match(aa[1]);
374
              if (ai) {
375
                ap = aa[0];
376
                break;
377
              }
378
            }
379
            if (!ai) {
380
              ap = F;
381
            }
382
          }
383
          am = ap.length >= 5 && "lang-" === ap.substring(0, 5);
384
          if (am && !(ai && typeof ai[1] === "string")) {
385
            am = false;
386
            ap = J;
387
          }
388
          if (!am) {
389
            aj[ag] = ap;
390
          }
391
        }
392
        var ab = af;
393
        af += ag.length;
394
        if (!am) {
395
          ad.push(Y + ab, ap);
396
        } else {
397
          var al = ai[1];
398
          var ak = ag.indexOf(al);
399
          var ac = ak + al.length;
400
          if (ai[2]) {
401
            ac = ag.length - ai[2].length;
402
            ak = ac - al.length;
403
          }
404
          var ar = ap.substring(5);
405
          B(Y + ab, ag.substring(0, ak), W, ad);
406
          B(Y + ab + ak, al, q(ar, al), ad);
407
          B(Y + ab + ac, ag.substring(ac), W, ad);
408
        }
409
      }
410
      ah.decorations = ad;
411
    };
412
    return W;
413
  }
414
  function i(T) {
415
    var W = [],
416
      S = [];
417
    if (T.tripleQuotedStrings) {
418
      W.push([
419
        C,
420
        /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
421
        null,
422
        "'\"",
423
      ]);
424
    } else {
425
      if (T.multiLineStrings) {
426
        W.push([
427
          C,
428
          /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
429
          null,
430
          "'\"`",
431
        ]);
432
      } else {
433
        W.push([
434
          C,
435
          /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
436
          null,
437
          "\"'",
438
        ]);
439
      }
440
    }
441
    if (T.verbatimStrings) {
442
      S.push([C, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
443
    }
444
    var Y = T.hashComments;
445
    if (Y) {
446
      if (T.cStyleComments) {
447
        if (Y > 1) {
448
          W.push([j, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, "#"]);
449
        } else {
450
          W.push([
451
            j,
452
            /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
453
            null,
454
            "#",
455
          ]);
456
        }
457
        S.push([
458
          C,
459
          /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
460
          null,
461
        ]);
462
      } else {
463
        W.push([j, /^#[^\r\n]*/, null, "#"]);
464
      }
465
    }
466
    if (T.cStyleComments) {
467
      S.push([j, /^\/\/[^\r\n]*/, null]);
468
      S.push([j, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
469
    }
470
    if (T.regexLiterals) {
471
      var X =
472
        "/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/";
473
      S.push(["lang-regex", new RegExp("^" + M + "(" + X + ")")]);
474
    }
475
    var V = T.types;
476
    if (V) {
477
      S.push([O, V]);
478
    }
479
    var U = ("" + T.keywords).replace(/^ | $/g, "");
480
    if (U.length) {
481
      S.push([
482
        z,
483
        new RegExp("^(?:" + U.replace(/[\s,]+/g, "|") + ")\\b"),
484
        null,
485
      ]);
486
    }
487
    W.push([F, /^\s+/, null, " \r\n\t\xA0"]);
488
    S.push(
489
      [G, /^@[a-z_$][a-z_$@0-9]*/i, null],
490
      [O, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
491
      [F, /^[a-z_$][a-z_$@0-9]*/i, null],
492
      [
493
        G,
494
        new RegExp(
495
          "^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*",
496
          "i",
497
        ),
498
        null,
499
        "0123456789",
500
      ],
501
      [F, /^\\[\s\S]?/, null],
502
      [L, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null],
503
    );
504
    return g(W, S);
505
  }
506
  var K = i({
507
    keywords: A,
508
    hashComments: true,
509
    cStyleComments: true,
510
    multiLineStrings: true,
511
    regexLiterals: true,
512
  });
513
  function Q(V, ag) {
514
    var U = /(?:^|\s)nocode(?:\s|$)/;
515
    var ab = /\r\n?|\n/;
516
    var ac = V.ownerDocument;
517
    var S;
518
    if (V.currentStyle) {
519
      S = V.currentStyle.whiteSpace;
520
    } else {
521
      if (window.getComputedStyle) {
522
        S = ac.defaultView
523
          .getComputedStyle(V, null)
524
          .getPropertyValue("white-space");
525
      }
526
    }
527
    var Z = S && "pre" === S.substring(0, 3);
528
    var af = ac.createElement("LI");
529
    while (V.firstChild) {
530
      af.appendChild(V.firstChild);
531
    }
532
    var W = [af];
533
    function ae(al) {
534
      switch (al.nodeType) {
535
        case 1:
536
          if (U.test(al.className)) {
537
            break;
538
          }
539
          if ("BR" === al.nodeName) {
540
            ad(al);
541
            if (al.parentNode) {
542
              al.parentNode.removeChild(al);
543
            }
544
          } else {
545
            for (var an = al.firstChild; an; an = an.nextSibling) {
546
              ae(an);
547
            }
548
          }
549
          break;
550
        case 3:
551
        case 4:
552
          if (Z) {
553
            var am = al.nodeValue;
554
            var aj = am.match(ab);
555
            if (aj) {
556
              var ai = am.substring(0, aj.index);
557
              al.nodeValue = ai;
558
              var ah = am.substring(aj.index + aj[0].length);
559
              if (ah) {
560
                var ak = al.parentNode;
561
                ak.insertBefore(ac.createTextNode(ah), al.nextSibling);
562
              }
563
              ad(al);
564
              if (!ai) {
565
                al.parentNode.removeChild(al);
566
              }
567
            }
568
          }
569
          break;
570
      }
571
    }
572
    function ad(ak) {
573
      while (!ak.nextSibling) {
574
        ak = ak.parentNode;
575
        if (!ak) {
576
          return;
577
        }
578
      }
579
      function ai(al, ar) {
580
        var aq = ar ? al.cloneNode(false) : al;
581
        var ao = al.parentNode;
582
        if (ao) {
583
          var ap = ai(ao, 1);
584
          var an = al.nextSibling;
585
          ap.appendChild(aq);
586
          for (var am = an; am; am = an) {
587
            an = am.nextSibling;
588
            ap.appendChild(am);
589
          }
590
        }
591
        return aq;
592
      }
593
      var ah = ai(ak.nextSibling, 0);
594
      for (var aj; (aj = ah.parentNode) && aj.nodeType === 1; ) {
595
        ah = aj;
596
      }
597
      W.push(ah);
598
    }
599
    for (var Y = 0; Y < W.length; ++Y) {
600
      ae(W[Y]);
601
    }
602
    if (ag === (ag | 0)) {
603
      W[0].setAttribute("value", ag);
604
    }
605
    var aa = ac.createElement("OL");
606
    aa.className = "linenums";
607
    var X = Math.max(0, (ag - 1) | 0) || 0;
608
    for (var Y = 0, T = W.length; Y < T; ++Y) {
609
      af = W[Y];
610
      af.className = "L" + ((Y + X) % 10);
611
      if (!af.firstChild) {
612
        af.appendChild(ac.createTextNode("\xA0"));
613
      }
614
      aa.appendChild(af);
615
    }
616
    V.appendChild(aa);
617
  }
618
  function D(ac) {
619
    var aj = /\bMSIE\b/.test(navigator.userAgent);
620
    var am = /\n/g;
621
    var al = ac.sourceCode;
622
    var an = al.length;
623
    var V = 0;
624
    var aa = ac.spans;
625
    var T = aa.length;
626
    var ah = 0;
627
    var X = ac.decorations;
628
    var Y = X.length;
629
    var Z = 0;
630
    X[Y] = an;
631
    var ar, aq;
632
    for (aq = ar = 0; aq < Y; ) {
633
      if (X[aq] !== X[aq + 2]) {
634
        X[ar++] = X[aq++];
635
        X[ar++] = X[aq++];
636
      } else {
637
        aq += 2;
638
      }
639
    }
640
    Y = ar;
641
    for (aq = ar = 0; aq < Y; ) {
642
      var at = X[aq];
643
      var ab = X[aq + 1];
644
      var W = aq + 2;
645
      while (W + 2 <= Y && X[W + 1] === ab) {
646
        W += 2;
647
      }
648
      X[ar++] = at;
649
      X[ar++] = ab;
650
      aq = W;
651
    }
652
    Y = X.length = ar;
653
    var ae = null;
654
    while (ah < T) {
655
      var af = aa[ah];
656
      var S = aa[ah + 2] || an;
657
      var ag = X[Z];
658
      var ap = X[Z + 2] || an;
659
      var W = Math.min(S, ap);
660
      var ak = aa[ah + 1];
661
      var U;
662
      if (ak.nodeType !== 1 && (U = al.substring(V, W))) {
663
        if (aj) {
664
          U = U.replace(am, "\r");
665
        }
666
        ak.nodeValue = U;
667
        var ai = ak.ownerDocument;
668
        var ao = ai.createElement("SPAN");
669
        ao.className = X[Z + 1];
670
        var ad = ak.parentNode;
671
        ad.replaceChild(ao, ak);
672
        ao.appendChild(ak);
673
        if (V < S) {
674
          aa[ah + 1] = ak = ai.createTextNode(al.substring(W, S));
675
          ad.insertBefore(ak, ao.nextSibling);
676
        }
677
      }
678
      V = W;
679
      if (V >= S) {
680
        ah += 2;
681
      }
682
      if (V >= ap) {
683
        Z += 2;
684
      }
685
    }
686
  }
687
  var t = {};
688
  function c(U, V) {
689
    for (var S = V.length; --S >= 0; ) {
690
      var T = V[S];
691
      if (!t.hasOwnProperty(T)) {
692
        t[T] = U;
693
      } else {
694
        if (window.console) {
695
          console.warn("cannot override language handler %s", T);
696
        }
697
      }
698
    }
699
  }
700
  function q(T, S) {
701
    if (!(T && t.hasOwnProperty(T))) {
702
      T = /^\s*</.test(S) ? "default-markup" : "default-code";
703
    }
704
    return t[T];
705
  }
706
  c(K, ["default-code"]);
707
  c(
708
    g(
709
      [],
710
      [
711
        [F, /^[^<?]+/],
712
        [E, /^<!\w[^>]*(?:>|$)/],
713
        [j, /^<\!--[\s\S]*?(?:-\->|$)/],
714
        ["lang-", /^<\?([\s\S]+?)(?:\?>|$)/],
715
        ["lang-", /^<%([\s\S]+?)(?:%>|$)/],
716
        [L, /^(?:<[%?]|[%?]>)/],
717
        ["lang-", /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
718
        ["lang-js", /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
719
        ["lang-css", /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
720
        ["lang-in.tag", /^(<\/?[a-z][^<>]*>)/i],
721
      ],
722
    ),
723
    ["default-markup", "htm", "html", "mxml", "xhtml", "xml", "xsl"],
724
  );
725
  c(
726
    g(
727
      [
728
        [F, /^[\s]+/, null, " \t\r\n"],
729
        [n, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, "\"'"],
730
      ],
731
      [
732
        [m, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
733
        [P, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
734
        ["lang-uq.val", /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
735
        [L, /^[=<>\/]+/],
736
        ["lang-js", /^on\w+\s*=\s*\"([^\"]+)\"/i],
737
        ["lang-js", /^on\w+\s*=\s*\'([^\']+)\'/i],
738
        ["lang-js", /^on\w+\s*=\s*([^\"\'>\s]+)/i],
739
        ["lang-css", /^style\s*=\s*\"([^\"]+)\"/i],
740
        ["lang-css", /^style\s*=\s*\'([^\']+)\'/i],
741
        ["lang-css", /^style\s*=\s*([^\"\'>\s]+)/i],
742
      ],
743
    ),
744
    ["in.tag"],
745
  );
746
  c(g([], [[n, /^[\s\S]+/]]), ["uq.val"]);
747
  c(i({ keywords: l, hashComments: true, cStyleComments: true, types: e }), [
748
    "c",
749
    "cc",
750
    "cpp",
751
    "cxx",
752
    "cyc",
753
    "m",
754
  ]);
755
  c(i({ keywords: "null,true,false" }), ["json"]);
756
  c(
757
    i({
758
      keywords: R,
759
      hashComments: true,
760
      cStyleComments: true,
761
      verbatimStrings: true,
762
      types: e,
763
    }),
764
    ["cs"],
765
  );
766
  c(i({ keywords: x, cStyleComments: true }), ["java"]);
767
  c(i({ keywords: H, hashComments: true, multiLineStrings: true }), [
768
    "bsh",
769
    "csh",
770
    "sh",
771
  ]);
772
  c(
773
    i({
774
      keywords: I,
775
      hashComments: true,
776
      multiLineStrings: true,
777
      tripleQuotedStrings: true,
778
    }),
779
    ["cv", "py"],
780
  );
781
  c(
782
    i({
783
      keywords: s,
784
      hashComments: true,
785
      multiLineStrings: true,
786
      regexLiterals: true,
787
    }),
788
    ["perl", "pl", "pm"],
789
  );
790
  c(
791
    i({
792
      keywords: f,
793
      hashComments: true,
794
      multiLineStrings: true,
795
      regexLiterals: true,
796
    }),
797
    ["rb"],
798
  );
799
  c(i({ keywords: w, cStyleComments: true, regexLiterals: true }), ["js"]);
800
  c(
801
    i({
802
      keywords: r,
803
      hashComments: 3,
804
      cStyleComments: true,
805
      multilineStrings: true,
806
      tripleQuotedStrings: true,
807
      regexLiterals: true,
808
    }),
809
    ["coffee"],
810
  );
811
  c(g([], [[C, /^[\s\S]+/]]), ["regex"]);
812
  function d(V) {
813
    var U = V.langExtension;
814
    try {
815
      var S = a(V.sourceNode);
816
      var T = S.sourceCode;
817
      V.sourceCode = T;
818
      V.spans = S.spans;
819
      V.basePos = 0;
820
      q(U, T)(V);
821
      D(V);
822
    } catch (W) {
823
      if ("console" in window) {
824
        console.log(W && W.stack ? W.stack : W);
825
      }
826
    }
827
  }
828
  function y(W, V, U) {
829
    var S = document.createElement("PRE");
830
    S.innerHTML = W;
831
    if (U) {
832
      Q(S, U);
833
    }
834
    var T = { langExtension: V, numberLines: U, sourceNode: S };
835
    d(T);
836
    return S.innerHTML;
837
  }
838
  function b(ad) {
839
    function Y(af) {
840
      return document.getElementsByTagName(af);
841
    }
842
    var ac = [Y("pre"), Y("code"), Y("xmp")];
843
    var T = [];
844
    for (var aa = 0; aa < ac.length; ++aa) {
845
      for (var Z = 0, V = ac[aa].length; Z < V; ++Z) {
846
        T.push(ac[aa][Z]);
847
      }
848
    }
849
    ac = null;
850
    var W = Date;
851
    if (!W.now) {
852
      W = {
853
        now: function () {
854
          return +new Date();
855
        },
856
      };
857
    }
858
    var X = 0;
859
    var S;
860
    var ab = /\blang(?:uage)?-([\w.]+)(?!\S)/;
861
    var ae = /\bprettyprint\b/;
862
    function U() {
863
      var ag = window.PR_SHOULD_USE_CONTINUATION ? W.now() + 250 : Infinity;
864
      for (; X < T.length && W.now() < ag; X++) {
865
        var aj = T[X];
866
        var ai = aj.className;
867
        if (ai.indexOf("prettyprint") >= 0) {
868
          var ah = ai.match(ab);
869
          var am;
870
          if (!ah && (am = o(aj)) && "CODE" === am.tagName) {
871
            ah = am.className.match(ab);
872
          }
873
          if (ah) {
874
            ah = ah[1];
875
          }
876
          var al = false;
877
          for (var ak = aj.parentNode; ak; ak = ak.parentNode) {
878
            if (
879
              (ak.tagName === "pre" ||
880
                ak.tagName === "code" ||
881
                ak.tagName === "xmp") &&
882
              ak.className &&
883
              ak.className.indexOf("prettyprint") >= 0
884
            ) {
885
              al = true;
886
              break;
887
            }
888
          }
889
          if (!al) {
890
            var af = aj.className.match(/\blinenums\b(?::(\d+))?/);
891
            af = af ? (af[1] && af[1].length ? +af[1] : true) : false;
892
            if (af) {
893
              Q(aj, af);
894
            }
895
            S = { langExtension: ah, sourceNode: aj, numberLines: af };
896
            d(S);
897
          }
898
        }
899
      }
900
      if (X < T.length) {
901
        setTimeout(U, 250);
902
      } else {
903
        if (ad) {
904
          ad();
905
        }
906
      }
907
    }
908
    U();
909
  }
910
  window.prettyPrintOne = y;
911
  window.prettyPrint = b;
912
  window.PR = {
913
    createSimpleLexer: g,
914
    registerLangHandler: c,
915
    sourceDecorator: i,
916
    PR_ATTRIB_NAME: P,
917
    PR_ATTRIB_VALUE: n,
918
    PR_COMMENT: j,
919
    PR_DECLARATION: E,
920
    PR_KEYWORD: z,
921
    PR_LITERAL: G,
922
    PR_NOCODE: N,
923
    PR_PLAIN: F,
924
    PR_PUNCTUATION: L,
925
    PR_SOURCE: J,
926
    PR_STRING: C,
927
    PR_TAG: m,
928
    PR_TYPE: O,
929
  };
930
})();
931
PR.registerLangHandler(
932
  PR.createSimpleLexer(
933
    [],
934
    [
935
      [PR.PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
936
      [PR.PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/],
937
      [PR.PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
938
      ["lang-", /^<\?([\s\S]+?)(?:\?>|$)/],
939
      ["lang-", /^<%([\s\S]+?)(?:%>|$)/],
940
      ["lang-", /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
941
      [
942
        "lang-handlebars",
943
        /^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i,
944
      ],
945
      ["lang-js", /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
946
      ["lang-css", /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
947
      ["lang-in.tag", /^(<\/?[a-z][^<>]*>)/i],
948
      [PR.PR_DECLARATION, /^{{[#^>/]?\s*[\w.][^}]*}}/],
949
      [PR.PR_DECLARATION, /^{{&?\s*[\w.][^}]*}}/],
950
      [PR.PR_DECLARATION, /^{{{>?\s*[\w.][^}]*}}}/],
951
      [PR.PR_COMMENT, /^{{![^}]*}}/],
952
    ],
953
  ),
954
  ["handlebars", "hbs"],
955
);
956
PR.registerLangHandler(
957
  PR.createSimpleLexer(
958
    [[PR.PR_PLAIN, /^[ \t\r\n\f]+/, null, " \t\r\n\f"]],
959
    [
960
      [
961
        PR.PR_STRING,
962
        /^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,
963
        null,
964
      ],
965
      [
966
        PR.PR_STRING,
967
        /^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,
968
        null,
969
      ],
970
      ["lang-css-str", /^url\(([^\)\"\']*)\)/i],
971
      [
972
        PR.PR_KEYWORD,
973
        /^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,
974
        null,
975
      ],
976
      [
977
        "lang-css-kw",
978
        /^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i,
979
      ],
980
      [PR.PR_COMMENT, /^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],
981
      [PR.PR_COMMENT, /^(?:<!--|-->)/],
982
      [PR.PR_LITERAL, /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],
983
      [PR.PR_LITERAL, /^#(?:[0-9a-f]{3}){1,2}/i],
984
      [
985
        PR.PR_PLAIN,
986
        /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i,
987
      ],
988
      [PR.PR_PUNCTUATION, /^[^\s\w\'\"]+/],
989
    ],
990
  ),
991
  ["css"],
992
);
993
PR.registerLangHandler(
994
  PR.createSimpleLexer(
995
    [],
996
    [
997
      [
998
        PR.PR_KEYWORD,
999
        /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i,
1000
      ],
1001
    ],
1002
  ),
1003
  ["css-kw"],
1004
);
1005
PR.registerLangHandler(
1006
  PR.createSimpleLexer([], [[PR.PR_STRING, /^[^\)\"\']+/]]),
1007
  ["css-str"],
1008
);
1009